import Mock from 'mockjs'

// 模拟新闻数据
var { newsList } = Mock.mock({    // 将newsList解构赋值出来
    // 将数组中的对象生成75次，newsList是这个数组的名字
    "newsList|75": [
      {
        id: "@increment",
        title: "@ctitle()",
        content: "@cparagraph(5,10)",
        img_url: "@image('50*50','#FF83FA','#FCFCFC','png','mono')",
        add_time: "@date(yyyy-MM-dd hh:mm:ss)",
      },
    ],
});

// 根据路由路径获取路径中携带的query参数
const getQuery = (url, queryName) => {   // url 接收当前的路由路径，queryName接收要从路径中获取到的参数
    // console.log(url, name);
    const index = url.indexOf('?');
    if(index !== -1){   // 如果index不等于-1，说明路由路径中有问号，路由路径中的问号后面承接的是携带的参数，这里就说明路由路径携带了参数
        // 将参数截取出来，在将这些参数根据 & 符号分隔成一个数组(因为如果携带了多个参数，都是以 & 符号连接)
        const queryStrArr = url.substr(index+1).split('&')
        // 遍历queryStrArr数组
        for (var i = 0; i < queryStrArr.length; i++) {
            const itemArr = queryStrArr[i].split("=");
            // console.log(itemArr);
            if (itemArr[0] === queryName) {
              return itemArr[1];
            }
        }
    }
    return null;
}


// 定义获取新闻列表的接口       /\/api\/get\/news/ 的意思是，这个用户访问这个路由路径时会携带参数，如果用 '\api\get\news'，可能匹配不到这个路径
Mock.mock(/\/api\/get\/news/,'get',(options)=>{   // 可以通过options获取到当前的路由路径
    // getQuery方法传递两个参数，第一个是路由路径，第二个参数是要从路由路径中截取出来的参数的值
    const pageIndex = getQuery(options.url, 'pageIndex')
    const pageSize = getQuery(options.url, 'pageSize')
    // pageIndex是当前的页码，pageSize是每一页展示的内容
    // console.log(pageIndex, pageSize);

    // 计算当前数据可以展示成多少页
    const totalPage = Math.ceil(newsList.length/pageSize)

    // 要根据pageIndex和pageSize返回数据
    const start = (pageIndex - 1)*pageSize  // 截取数据的起始位置
    const end = pageIndex*pageSize  // 截取数据的终点位置
    // 如果页码大于当前数据可以展示的最大页数，那么就返回一个空数组，反之，则返回当前页码中展示的数据
    const list = pageIndex>totalPage?[]:newsList.slice(start,end)

    return {
        status: 200,
        message: '获取新闻列表成功',
        list: list,
        total: newsList.length
    }
})

// 定义添加新闻的接口
Mock.mock('/api/add/news','post',(options)=>{
    // 由于这个接口的请求方式是post，传递的参数在请求体body中
    const body = JSON.parse(options.body)
    newsList.push(
        Mock.mock({
          id: "@increment",
          title: body.title,    // 请求体body中携带的title
          content: body.content,
          img_url: "@image('50*50','#FF83FA','#FCFCFC','png','mono')",
          add_time: "@date(yyyy-MM-dd hh:mm:ss)",
        })
    );
    return {
        status: 200,
        message: '添加成功',
        list: newsList,
        total: newsList.length,
    }
})

// 定义删除新闻
Mock.mock("/api/delete/news", "post", (options) => {
    const body = JSON.parse(options.body);
    // 根据请求体中携带的id参数获取到要被删除的新闻的下标值
    const index = newsList.findIndex((item) => {
      return item.id === body.id;
    });
    // 根据下标值在newsList数组中将指定的新闻数据删除
    newsList.splice(index, 1);
    return {
      status: 200,
      message: "添加成功",
      list: newsList,
      total: newsList.length,
    };
});